#ifndef MQTTHANDLER_H
#define MQTTHANDLER_H

#include <QObject>
#include <QString>
#include "mqtt/qmqtt.h"

#include <QJsonDocument>
#include <QJsonValue>
#include <QJsonObject>
#include <QByteArray>
#include <QJsonArray>
#include <QJsonParseError>

class MqttHandler : public QObject
{
    Q_OBJECT
public:
//    static QString topic;


    explicit MqttHandler(QObject *parent = 0);
    void connectToHost();  // 启动与 MQTT 服务器的连接
    void setHost(const QHostAddress& host)   // 设置 MQTT 服务器的地址
    {
        client->setHost(host);
    }

    void setPort(const quint16 port)  // 设置 MQTT 服务器的端口号。
    {
        client->setPort(port);
    }

signals:
    void dataUpSignal(const QByteArray &);  // 当有数据上报时发出的信号。
    void ctrlUpSignal(const QByteArray &);  // 当有控制信号上报时发出的信号。

    void hissignal(const QByteArray &);

public slots:
    void doConnected();  // 当客户端连接到 MQTT 服务器时调用的槽函数。
    void doSubscribed(const QString& topic, const quint8 qos);  // 当客户端订阅主题成功时调用的槽函数。
    void doDataReceived(QMQTT::Message message);  // 当客户端接收到消息时调用的槽函数。
    void detectState();   // 检测 MQTT 客户端状态的槽函数。
    quint16 publish(const QMQTT::Message& message);  // 用于发布消息的槽函数。

private:
    QMQTT::Client *client;  // MQTT 客户端对象
};

#endif // MQTTHANDLER_H
